<?php

namespace app\common\model;

use think\facade\Db;

/**
 * 账户基本数据处理
 * 
 * 时间 ： 2020年4月2日23:33:35
 * 作者 ： 夏立军
 */
class UserModel
{

    /**
     * 通过账号获取账户信息
     * @param string $account 用户账号
     * @return 返回用户信息
     */
    public function get_user_info_by_account(string $account)
    {
        $user_info = Db::name('user')->where('account', $account)->find();
        return $user_info;
    }

    /**
     * 注册用户
     * @param string $account 用户账号
     * @param string $password 用户密码
     * @param string $name 用户昵称
     */
    public function register_user(string $account, string $password, string $name)
    {
        $data['account'] = $account;
        $data['password'] = $password;
        $data['name'] = $name;
        $data['create_time'] = time();
        try {
            Db::name('user')->save($data);
        } catch (\Throwable $th) {
            return false;
        }
        return true;
    }

    /**
     * 获取所有用户的数量信息
     */
    public function get_user_count()
    {
        $user_count = Db::name('user')->count();
        return $user_count;
    }

    /**
     * 获取所有的用户信息
     * @return 返回所有的用户
     */
    public function get_user_all_data(){
        $user_data = Db::name('user')->select();
        return $user_data;
    }

    /**
     * 用户列表 分页显示
     * 
     * @param $offset 获取数据的开始位置
     * @param $size   获取数据的条数
     * @return 获取到的所有项目
     */
    public function user_list_page(int $offset, int $size = 10)
    {
        $user_list = Db::name('user')
            ->field('id,account,name,tel,phone,create_time')
            ->limit($offset, $size)->select();
        return $user_list;
    }

    /**
     * 通过excel模板导入数据
     * @param $account 用户账号
     * @param $name 用户名称
     * @param $tel 办公室电话
     * @param $phone 手机号
     * @param $address 办公室地址
     * @return $create_time 创建时间
     */
    public function user_data_import_by_excel($account, $name, $tel, $phone, $address, $time)
    {
        $data['account'] = $account;
        $data['password'] = md5('123456' . config('ams_config.user_password_suffix'));
        $data['name'] = $name;
        $data['tel'] = $tel;
        $data['phone'] = $phone;
        $data['address'] = $address;
        $data['create_time'] = $time;

        try {
            $res = Db::name('user')->save($data);
        } catch (\Exception  $e) {
            $res = false;
        }
        return $res;
    }

    /**
     * 通过ID获取账户信息
     * @param $id 用户ID
     */
    public function get_user_info_by_id($id){
        return Db::name('user')->where('id',$id)->find();
    }

    /**
     * 修改个人信息
     * @param id 用户ID
     * @return data 需要被修改的用户信息
     * @return 是否修改成功
     */
    public function set_user_info(int $id,array $data){
        try {
            $user_res = Db::name('user')->where('id',$id)->save($data);
        } catch (\Throwable $th) {
            $user_res = false;
        }
        return $user_res;
    }

    /**
     * 删除用户
     * @param id 需要删除的用户ID
     * @return 是否删除成功
     */
    public function del_user_info_by_id($id){
        try {
            $user_res = Db::name('user')->where('id',$id)->delete();
        } catch (\Throwable $th) {
            $user_res = false;
        }
        return $user_res;
    }

    /**
     * 重置密码
     * @param id 需要重置密码的ID
     * @param password 需要重置的密码
     * @return 是否重置成功
     */
    public function re_password(int $id,string $password){
        $data['password'] = $password;
        $data['update_time'] = time();
        return Db::name('user')->where('id',$id)->save($data);
    }


    /**
     * 通过用户ID获取所有已存在的权限数据
     * @param uid 用户ID
     * @return 所有的已存在的权限
     */
    public function get_user_all_permissions_by_uid($uid){
        $up_res = Db::name('user_role')->alias('ur')
            ->join(['ams_role_permissions' => 'rp'], 'ur.rid=rp.rid')
            ->join(['ams_permissions' => 'p'], 'rp.pid=p.id')
            ->field('ur.uid,rp.pid,p.name,p.url')
            ->where('uid',$uid)
            ->where('status',1)
            ->select();
        return $up_res;
    }

    /**
     * 通过UID获取已拥有的角色
     * @param $uid 用户ID
     * @return 所有的已存在的角色
     */
    public function get_role_list_by_uid(int $uid){
        $res = Db::name('user_role')->alias('ur')
        ->join(['ams_role' => 'r'], 'ur.rid=r.id')
        ->where('uid',$uid)
        ->select();
        return $res;
    }

    /**
     * 判断用户是否有超级权限
     * @param uid 用户ID
     * @return 是否具有超级权限
     */
    public function get_user_exist_permissions_by_uid($uid){
        return Db::name('user_role')->alias('ur')
        ->join(['ams_role' => 'r'], 'ur.rid=r.id')
        ->where('uid',$uid)->where('r.status',9)
        ->find();
    }

}
